<?php
/**
 * SEditor Code to Html Tools
 * SEditor Code 转换成标准 HTML工具
 * 
 * @author Shaird
 * QQ: 17349620
 * @Last Modify: 2009年 4月20日
 */
class Helper_SEditorBBCode{
	
	static function toHtml($str,$img_url=null){
		//设置SEditor图片目录所在位置
		if (!$img_url){
			$img_url= url().'/img/seditor';
		}
		
		if(!$str) return ""; //没有数据返回
		
		//替换 < > & " ' 为 HTML 可以识别的符号
		$str= htmlspecialchars($str,ENT_QUOTES);
		
		//替换回车符\r 为<br />
		$str=str_replace("\r","<br />",$str);
		
		//替换表格符\t 为 四空格
		$str=str_replace("\t","&nbsp;&nbsp;&nbsp;&nbsp;",$str);
		
		//自动吧没有加[URL]的地址加上URL标签
		//$str=preg_replace("/(?<=[^\]a-z0-9-=\"'\\/])((https?|ftp|gopher|news|telnet|rtsp|mms|callto|ed2k):\/\/|www\.)([a-z0-9\/\-_+=.~!%@?#%&;:$\\()|]+)/i", "[url]\\1\\3[/url]", $str);
		
		if(!preg_match('/\[.+\]/',$str)) return $str; //无需匹配则返回

		if(preg_match('/\[B\]/i',$str)){//匹配 B
			$str = self::B($str);
		}
		
		if(preg_match('/\[I\]/i',$str)){//匹配 I
			$str = self::I($str);
		}
		
		if(preg_match('/\[U\]/i',$str)){//匹配 U
			$str = self::U($str);
		} 
		
		if(preg_match('/\[COLOR:[0-9a-zA-Z]{3,6}\]/i',$str)){//匹配 COLOR
			$str = self::Color($str);
		} 
		
		if(preg_match('/\[IMG\]/i',$str)){ //匹配 IMG
			$str=self::Img($str);
		}
		
		if(preg_match('/\[URL\]/i',$str)){ //匹配 [URL][/URL]
			$str=self::Url1($str);
		}
		
		if(preg_match('/\[URL=.+\]/i',$str)){ //匹配 [URL=***]***[URL]
			$str=self::Url2($str);
		}
		
		if(preg_match('/\[S:\d{3}\]/i',$str)){//匹配 表情[S:***]
			$str = self::Smile($str,$img_url);
		}
		
		if(preg_match('/\[QUOTE\]/i',$str)){ //匹配 [QUOTE][/QUOTE]
			$str=self::Quote($str);
		}
		
		if(preg_match('/\[CODE\]/i',$str)){ //匹配 [CODE][/CODE]
			$str=self::Code($str);
		}
		
		return $str;
	}
	
	//替换 [B][/B]
	protected static function B($str){
		return preg_replace('/\[B\](.+?)\[\/B\]/is','<b>\\1</b>',$str);
	}
	
	//替换[U][/U]
	protected static function U($str){
		return preg_replace('/\[U\](.+?)\[\/U\]/is','<u>\\1</u>',$str);
		
	}
	
	//替换[I][/I]
	protected static function I($str){
		return preg_replace('/\[I\](.+?)\[\/I\]/is','<i>\\1</i>',$str);
	}
	
	//替换[COLOR:*] [/COLOR]
	protected static function Color($str){
		$str = str_replace('[COLOR:RED]','[COLOR:ff0000]',$str);
		$str = str_replace('[COLOR:GREEN]','[COLOR:00ff00]',$str);
		$str = str_replace('[COLOR:BLUE]','[COLOR:0000ff]',$str);
		$str = str_replace('[COLOR:YELLOW]','[COLOR:ffff00]',$str);
		$str = str_replace('[COLOR:GREY]','[COLOR:cccccc]',$str);
		$str = str_replace('[COLOR:WHITE]','[COLOR:ffffff]',$str);
		$str = str_replace('[COLOR:BLACK]','[COLOR:000000]',$str);
		
		return preg_replace('/\[COLOR:([0-9a-zA-Z]{3,6})\](.+?)\[\/COLOR\]/is','<font color="#\\1">\\2</font>',$str);
	}
	
	//替换[IMG][/IMG]
	protected static function Img($str){
		return preg_replace('/\[IMG\](.+?)\[\/IMG\]/i','<br /><img src="\\1" /><br />',$str);
	}
	
	//替换[URL][/URL]
	protected static function Url1($str){
		return preg_replace('/\[URL\](.+?)\[\/URL\]/i','<a href="\\1">\\1</a>',$str);
	}
	
	//替换[URL=""][/URL]
	protected static function Url2($str){
		return preg_replace('/\[URL=(.+?)\](.+?)\[\/URL\]/i','<a href="\\1">\\2</a>',$str);
	}
	
	//替换表情[S:]
	protected static function Smile($str,$img_url){
		return preg_replace('/\[S:(\d{3})\]/i','<img src="'.$img_url.'/smile/\\1.gif" />',$str);
	}
	
	//替换引用 [QUOTE][/QUOTE]
	protected static function Quote($str){
		return preg_replace('/\[QUOTE\](.+?)\[\/QUOTE\]/is','<div class="quote">\\1</div>',$str);
	}
	
	//替换代码[CODE][/CODE]
	protected static function Code($str){
			return preg_replace('/\[CODE\](.+?)\[\/CODE\]/is','<div class="code">\\1</div>',$str);
	}
	
}

?>